﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GcmpApplication.h"
#include "GcmpAppPreHandle.h"
namespace gcmp
{
class IApplication;

/// \brief  主程序管理器，负责创建和销毁主程序
class GCMP_APPLICATION_EXPORT ApplicationManager
{
public:
    /// \brief 创建主程序
    ///
    /// main函数中必须调用该函数创建主程序，且只能创建一个，之后可以使用IApplication::Get()来获取已经创建的主程序
    /// 会将当前程序的DebugWarnDisplayer切换为弹窗形式，  \see IDebugWarningDialogDisplayer
    /// \param  argc 命令行参数 
    /// \param  argv 命令行参数 
    /// \return 主程序接口指针
    /// \see IApplication* IApplication::Get()
    static IApplication* Create(int& argc, char** argv, CallbackFunForMessage fun = nullptr);

    /// \brief 销毁主程序
    ///
    /// 在main函数返回之前必须调用该函数销毁主程序
    static void Destroy();
};

}   // end namespace gcmp
